/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.viajaconmigo.web.controladores;

import com.viajaconmigo.model.Propuesta;
import com.viajaconmigo.web.controladores.util.JSFUtil;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.faces.model.SelectItem;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author Pablo
 */
//@ManagedBean(name = "listaPropuestas")
@Named("listaPropuestas")
@SessionScoped
public class ListaPropuestasController extends ParentController implements Serializable {
    
    private final static Logger logger = LoggerFactory.getLogger(ListaPropuestasController.class);

    private Integer paisDestino;
    private Date fechaIni;
    private Date fechaFin;
    private Short numDiasMax;
    private Short numDiasMin;
    /*
     private Integer planEco;
     private Integer planOcio;
     private String descriplan;
     */
    private boolean sessionOpen;
    private boolean index;

    private Integer idPropSelected;

    private List<Propuesta> propuestas;

    /**
     * Creates a new instance of ListaPropuestasController
     */
    public ListaPropuestasController() {
        descriplan = "";
        descriplocio = "";
        index = true;
        sessionOpen = false;
        numDiasMin = null;
        numDiasMax = null;
    }

    public Date getFechaFin() {
        return fechaFin;
    }

    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    public Date getFechaIni() {
        return fechaIni;
    }

    public void setFechaIni(Date fechaIni) {
        this.fechaIni = fechaIni;
    }

    public Short getNumDiasMax() {
        return numDiasMax;
    }

    public void setNumDiasMax(Short numDiasMax) {
        this.numDiasMax = numDiasMax;
    }

    public Short getNumDiasMin() {
        return numDiasMin;
    }

    public void setNumDiasMin(Short numDiasMin) {
        this.numDiasMin = numDiasMin;
    }

    public Integer getPaisDestino() {
        return paisDestino;
    }

    public void setPaisDestino(Integer paisDestino) {
        this.paisDestino = paisDestino;
    }
    /*
     public Integer getPlanEco() {
     return planEco;
     }

     public void setPlanEco(Integer planEco) {
     this.planEco = planEco;
     }

     public Integer getPlanOcio() {
     return planOcio;
     }

     public void setPlanOcio(Integer planOcio) {
     this.planOcio = planOcio;
     }

    
    
     public String getDescriplan() {
     return descriplan;
     }

     public void setDescriplan(String descriplan) {
     this.descriplan = descriplan;
     }
     */

    public List<Propuesta> getPropuestas() {
        return propuestas;
    }

    public void setPropuestas(ArrayList<Propuesta> propuestas) {
        this.propuestas = propuestas;
    }

    public boolean isSessionOpen() {
        return sessionOpen;
    }

    public void setSessionOpen(boolean sessionOpen) {
        this.sessionOpen = sessionOpen;
    }

    public boolean isIndex() {
        return index;
    }

    public void setIndex(boolean index) {
        this.index = index;
    }

    public Integer getIdPropSelected() {
        return idPropSelected;
    }

    public void setIdPropSelected(Integer idPropSelected) {
        this.idPropSelected = idPropSelected;
    }

    public void cargaListas() {
        try {
            cargaListaPaises();
            cargaListaPlEco();
            cargaListaPlOcio();
        } catch (RuntimeException e) {
            JSFUtil.createMessageError("", "error_general");
            logger.error("Se he producido un error al cargar las listas",e);
        }
    }

    @Override
    public void cargaListaPlEco() {
        try {
            super.cargaListaPlEco();
            getPlEcoSelect().add(0, new SelectItem(0, JSFUtil.getBundle().getString("no_select")));
        } catch (RuntimeException e) {
            JSFUtil.createMessageError("", "error_general");
            logger.error("Se he producido un error al cargar la lista de Planes Economicos",e);
        }
    }

    @Override
    public void cargaListaPlOcio() {
        try {
            super.cargaListaPlOcio();
            getPlOcioSelect().add(0, new SelectItem(0, JSFUtil.getBundle().getString("no_select")));
        } catch (RuntimeException e) {
            JSFUtil.createMessageError("", "error_general");
            logger.error("Se he producido un error al cargar la lista de Planes de Ocio",e);
        }
    }

    public String doBuscarToMenu() {
        String ret = "";
        try {
            propuestas = propuestaService.buscaPropuesta(paisDestino, fechaIni,
                    fechaFin, numDiasMax, numDiasMin, planEco, planOcio);
            ret = "menupage";
        } catch (RuntimeException e) {
            JSFUtil.createMessageError("", "error_general");
            logger.error("Se he producido un error al Buscar Propuestas",e);
        }
        return ret;
    }

    public String doBuscarToListado() {
        String ret = "";
        try {
            propuestas = propuestaService.buscaPropuesta(paisDestino, fechaIni,
                    fechaFin, numDiasMax, numDiasMin, planEco, planOcio);
            ret = "listadopropuestas";
        } catch (RuntimeException e) {
            JSFUtil.createMessageError("", "error_general");
            logger.error("Se he producido un error al Buscar Propuestas",e);
        }
        return ret;
    }

    public void listenFechaIniChange() {
        fechaIni = null;
    }

    public void listenNDiasMinChange() {
        numDiasMin = null;
    }
    /*
     public void listenPlanChange (){
     if (planEco == null)
     descriplan = "";
     else{
     for (int i = 0; i<getPlEcoSelect().size(); i++){
     if (getPlEcoSelect().get(i).getValue().equals(planEco))
     descriplan = getPlEcoSelect().get(i).getDescription();
     }
     }
     }
     */

    public String update() {
        if (index) {
            return "findproposal";
        } else {
            return ":tabla_propuestas";
        }
    }

    public void doSetProposals(Integer idProp) {
        idPropSelected = idProp;
    }
}
